package com.sxit.tdf.server.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sxit.tdf.server.entity.User;
import com.sxit.tdf.server.entity.bo.*;
import com.sxit.tdf.server.entity.vo.InsertUserInfoVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;
import java.util.Set;

/**
 * 用户表 Mapper 接口
 *
 * @author 橙子高🍊
 * @since 2022-02-05
 */
@Mapper
public interface UserMapper extends BaseMapper<User> {

  /**
   * 判断是否存在
   *
   * @return
   */
  boolean isExistUsername(String username);

  /**
   * 根据用户名查询密码
   *
   * @param username
   * @return
   */
  UserIdAndPassword searchPasswordByUsername(String username);

  /**
   * 根据用户名查询 权限
   *
   * @param userId
   * @return
   */
  Set<String> searchUserPermission(String userId);

  /**
   * 获取全部的用户信息
   *
   * @return
   */
  List<UserInfoBo> searchAllUser();

  /**
   * 获取当前用户的信息
   *
   * @param userId
   * @return
   */
  UserInfoBo searchUserInfo(String userId);

  /**
   * 修改数据时获取到用的 获取用户信息 并转换格式
   *
   * @param userId
   * @return
   */
  InsertUserInfoVo searchUserInfoInInsert(String userId);

  /**
   * 通过删选获取用户信息
   *
   * @param
   * @return
   */
  IPage<UserInfoBo> searchAllUserBySift(Page<UserInfoBo> page, @Param("map") HashMap map);

  /**
   * 创建用户信息
   *
   * @param map
   * @return
   */
  int insertUserInfo(@Param("map") HashMap map);

  /**
   * 获取班级下的用户信息
   *
   * @param id
   * @return
   */
  List<SimpleClassesIntoUserInfoBo> getSimpleClassesIntoUserInfoBo(int id);

  /**
   * 获取课程新增所需的用户信息
   *
   * @return
   */
  List<SimpleUserInfoToSift> getSimpleUserInfoToSiftList();

  /**
   * 获取教师列表
   *
   * @return
   */
  List<SimpleTeacherList> getSimpleTeacherList();

  List<SimpleUserInfo> getSimpleUserInfo();

  void modifyPassword(
      @Param("password") String password,
      @Param("id") String id,
      @Param("userName") String userName);
}
